package conservare.listener;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;

import conservare.modelo.Auditavel;
import conservare.modelo.Auditoria;
import conservare.modelo.Usuario;
import conservare.util.ContextoUtil;

public class AuditoriaListener implements Serializable{

	private static final long serialVersionUID = -3065759270426654905L;

	@PrePersist
	public void onPrePersist(Object o) {
		populateTimestamp(o);
	}
	 
	@PreUpdate
	public void onPreUpdate(Object o) {
		populateTimestamp(o);
	}
	 
	public void populateTimestamp(Object o) {
		
		if (o instanceof Auditavel) {
			
			Usuario usuarioLogado = ContextoUtil.getContextoBean().getUsuarioLogado();
			Date data = new Date();
			
			Auditavel entity = (Auditavel) o;
			if(entity.getAuditoria() == null){
				entity.setAuditoria(new Auditoria());
			}
			
			if(entity.getAuditoria().getDataCadastro() == null){
				entity.getAuditoria().setDataCadastro(data);
				entity.getAuditoria().setUsuarioCadastro(usuarioLogado);
			}
			
			entity.getAuditoria().setDataAlteracao(data);
			entity.getAuditoria().setUsuarioAlteracao(usuarioLogado);
			
		}
	}
	
}
